package com.yyoo.doc.html.style;


import java.awt.*;
import java.util.List;

/**
 * 穷举支持的 html 标签的 style 属性
 *
 * @author zzy
 */
public interface StyleAttr {

    String FONT_FAMILY = "font-family";

    String FONT_SIZE = "font-size";

    String FONT_STYLE = "font-style";

    String COLOR = "color";

    String TEXT_ALIGN = "text-align";
    // 垂直对齐方式
    String VERTICAL_ALIGN = "vertical-align";
    // 水平对齐方式
    String HORIZONTAL_ALIGN = "horizontal-align";

    // 位置相关属性（left 和 bottom 确定左下角的坐标)
    String LEFT = "left";
    String BOTTOM = "bottom";

    // 位置相关属性（top 和 right 确定右上角的坐标)
    String TOP = "top";
    String RIGHT = "right";


    //--> border 相关属性（不支持 border 属性，PDF 工具限定）
    String BORDER_WIDTH = "border-width";
    String BORDER_COLOR = "border-color";
    String BORDER_LEFT_WIDTH = "border-left-width";
    String BORDER_LEFT_COLOR = "border-left-color";
    String BORDER_RIGHT_WIDTH = "border-right-width";
    String BORDER_RIGHT_COLOR = "border-right-color";
    String BORDER_TOP_WIDTH = "border-top-width";
    String BORDER_TOP_COLOR = "border-top-color";
    String BORDER_BOTTOM_WIDTH = "border-bottom-width";
    String BORDER_BOTTOM_COLOR = "border-bottom-color";

    //---> 设置 margin （目前只支持 table 设置 top(对应 setSpacingBefore) 和 bottom（对应 setSpacingAfter））
    String MARGIN_TOP = "margin-top";
    String MARGIN_RIGHT = "margin-right";
    String MARGIN_LEFT = "margin-left";
    String MARGIN_BOTTOM = "margin-bottom";

    //--> 设置 padding
    String PADDING = "padding";
    String PADDING_LEFT = "padding-left";
    String PADDING_RIGHT = "padding-right";
    String PADDING_TOP = "padding-top";
    String PADDING_BOTTOM = "padding-bottom";

    String BACKGROUND_COLOR = "background-color";
    // ul 和 ol 的 list-style-type 属性
    String LIST_STYLE_TYPE = "list-style-type";
    // header-rows 自定义属性（为 1 表示在表跨页时，每页都会有表头，为 0 表示只有首页有表头，其余跨页不会生成表头）
    String HEADER_ROWS = "header-rows";
    String FOOTER_ROWS = "footer-rows";

    // width table 的属性只支持百分比
    String WIDTH = "width";
    // 用于设置元素的高度
    String HEIGHT = "height";
    // 用于在 table 标签上设置单元格的默认行高
    String CELL_HEIGHT = "cell-height";

    // 此属于自定义属性（用于等价于标签的 align 属性）
    String ALIGN = "align";
    // 此属于自定义属性（用于表格的列数）
    String COLS = "cols";
    // 此属于自定义属性（用于表格每列的宽度百分比）
    String COL_WIDTHS = "col-widths";

    /**
     * 判断是否支持 styleName
     * @param styleName 样式属性名称
     * @return 是否支持
     */
     static boolean isSupportStyleKey(String styleName){
         return SIZE_CONVERTER.support(styleName) ||
                 FONT_STYLE_CONVERTER.support(styleName) ||
                 COLOR_CONVERTER.support(styleName) ||
                 ALIGN_CONVERTER.support(styleName) ||
                 ARRAY_SIZE_CONVERTER.support(styleName) ||
                 LIST_STYLE_TYPE.equals(styleName);
     }

    /**
     * 尺寸转换器
     */
     StyleValueConverter<Float> SIZE_CONVERTER = new SizeConverter();

    /**
     * 字体样式转换器
     */
     StyleValueConverter<Integer> FONT_STYLE_CONVERTER = new FontStyleConverter();

    /**
     * 颜色转换器
     */
     StyleValueConverter<Color> COLOR_CONVERTER = new ColorConverter();

     /**
      * 对齐转换器
      */
     StyleValueConverter<Integer> ALIGN_CONVERTER = new AlignConverter();

    /**
     * 数字列表格式的样式转换器
     */
    StyleValueConverter<List<Integer>> ARRAY_SIZE_CONVERTER = new ArraySizeConverter();

}
